#include "ModuleConcatDescriptors.h"

void ModuleConcatDescriptors::init(QCVModuleHandlerInterface * parent)
{
	this->parent=parent;
	win=new QWidget();
  layout=new QVBoxLayout(win);
	sb_nbInputs=new QSpinBox(win);
	sb_nbInputs->setPrefix("inputs=");
	sb_nbInputs->setRange(2,4);	
	layout->addWidget(sb_nbInputs);
}
////////////////////////////////////////////////////////////////////////////////
void ModuleConcatDescriptors::free()
{
	delete win;
}
////////////////////////////////////////////////////////////////////////////////
cv::Mat & ModuleConcatDescriptors::process()
{
	out_desc=desc[0];
	
	if(!desc[0].empty())
	{
		for(int i=1;i<sb_nbInputs->value();i++)
		{		
			if(!desc[i].empty() && desc[i].rows==desc[0].rows)cv::hconcat(out_desc,desc[i],out_desc);
		}
	}
	printf("%d %d %d %d %d %d\n",desc[0].rows,desc[1].rows,desc[0].cols,desc[1].cols,out_desc.rows,out_desc.cols);

	return out_desc;
}
////////////////////////////////////////////////////////////////////////////////
void ModuleConcatDescriptors::setInput(int n,const cv::Mat & m)
{
	if(n<4)
	{
		desc[n]=m.clone();
	}
}
////////////////////////////////////////////////////////////////////////////////
QWidget* ModuleConcatDescriptors::widget()
{
	return win;
}
////////////////////////////////////////////////////////////////////////////////
QString ModuleConcatDescriptors::getName()
{
	return tr("Descriptors Concatener");
}
////////////////////////////////////////////////////////////////////////////////
int ModuleConcatDescriptors::nbInputs()
{
	return sb_nbInputs->value();
}
////////////////////////////////////////////////////////////////////////////////
bool ModuleConcatDescriptors::setParams(QString params)
{
	QStringList list_params=params.split(";");
		
	if(list_params.size()==1)
	{
		sb_nbInputs->setValue(list_params[0].toInt());
		return true;
	}
	else
	{
		return false;
	}	
}
////////////////////////////////////////////////////////////////////////////////
QString ModuleConcatDescriptors::getParams()
{
	return QString::number(sb_nbInputs->value());
}
////////////////////////////////////////////////////////////////////////////////
QString ModuleConcatDescriptors::help(int id)
{
	if(id==-2)
	{
		return tr("Permet de concatener plusieurs descripteurs de même dimension");
	}
	else if(id==-1)
	{
		return tr("descripteurs");
	}
	else if(id==0)
	{
		return tr("descripteurs");
	}
	else if(id==1)
	{
		return tr("descripteurs");
	}
	else if(id==2)
	{
		return tr("descripteurs");
	}
	else if(id==3)
	{
		return tr("descripteurs");
	}
	else
	{
		return tr("erreur");
	}
}
////////////////////////////////////////////////////////////////////////////////
Q_EXPORT_PLUGIN2(ModuleConcatDescriptors_plugin,ModuleConcatDescriptors);  
